package com.zlm.Collection;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

/**
 * @author 13026
 *
 * ArrayList 可重复
 * LinkedList 增删操作多余查询
 * HashSet 去重
 * LinkedHashSet 保证存取顺序
 * TreeSet 排序
 */
public class Collection_Interface_demo {
    /*
     * Collection 是单列集合的祖宗接口，它的功能是所有单列集合都可以继承使用
     * Collection 是接口，不能直接创建对象，需要创建实现类对象，多态
     *
     * public boolean add (E e)           添加
     * public boolean remove (E e)        删除
     * public void clear ()               清空
     *
     * public boolean contains (Object o) 判断是否包含
     * public boolean isEmpty ()          判断是否为空
     *
     * public int size()                  获取集合长度
     * */
    public static void main(String[] args) {
        Collection<String> c = new ArrayList<>();
        // 添加元素
        // List 永远返回true，List系列允许元素重复
        // Set 如果不存在true，表示添加成功
        c.add("aaa");
        c.add("bbb");

        // Collection里面定义的是共性的方法，不能通过索引删除
        // 删除成功返回true，失败返回false--即删除的元素不存在
        c.remove("aaa");

        // 清空集合
        c.clear();
        System.out.println(c);

        // 底层依赖equals实现
        // 如果集合中存的是自定义对象，需要重写equals
        boolean b = c.contains("aaa");

        // 判断集合是否为空
        boolean b2 = c.isEmpty();

        // 获取集合长度
        int size = c.size();

        // 三种通用遍历方式
        /*
         * 迭代器遍历
         * 不依赖索引
         * 迭代器遍历的时候不能使用集合的方法进行添加删除操作，用it.remove()
         * */
        Iterator<String> it = c.iterator();
        while (it.hasNext()) {
            // next 获取元素，移动指针
            String str = it.next();
        }

        /*
         * 增强for
         * 底层就是Iterator
         * 使用范围：所有单列集合和数组
         * */
        for (String str : c) {
            System.out.println(str);
        }

        /*
        * Lambda表达式遍历
        *   default void forEach(Consumer<? super T> action)
        * */
        Collection<String> c2 = new ArrayList<>();
        c2.add("张三");
        c2.forEach(System.out::println);
    }
}
